package com.study.kt._01grammar._02oop

/**
 * 1.抽象类类似于类的本质抽象 只能继承一个
 * 2.接口相当于类的能力，可以实现多个接口
 */
fun main() {
    var brid = Bird("haha")
    brid.eat()
}

//声明接口（定义能力）
//接口的方法可以有默认实现
interface Fly {
    fun fly()

    //直接在接口中实现方法，子类中无需再次实现
    //接口中有默认实现，可以处理通用逻辑，直接实现接口即可
    fun fastFly() {
        println("快速实现")
    }
}

interface Fight {
    fun fight()
}

//使用abstract修饰类 声明为抽象类
//抽象类被继承不需要使用 open修饰
abstract class Animal6(var name: String) {
    //抽象方法，也不需要加open 修饰也可以被复写
    abstract fun eat()
}

//继承抽象类 实现Fly、Fight接口
class Bird(name: String) : Animal6(name), Fly, Fight {
    override fun fight() {
        println("鸟打架")
    }

    override fun fly() {
        println("鸟飞")
    }

    override fun eat() {
        println("鸟吃饭")
    }
}